#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

void *pthread_fun(void *arg)
{
  sleep(5);
  return NULL;
}

int main()
{

  pthread_t t1;
  int ret;
  ret = pthread_create(&t1, NULL, &pthread_fun, NULL);
  if (ret != 0)
  {
    printf("pthread_create error:%s\n", strerror(ret)); // 线程函数出错直接返回错误号,通过strerror打印错误信息
    exit(1);
  }

  ret = pthread_detach(t1); // 分离线程,分离后的线程不可再被join,只能通过pthread_exit退出
  // 同时线程结束后会自动释放资源
  if (ret != 0)
  {
    printf("pthread_detach error:%s\n", strerror(ret));
    exit(1);
  }

  // 回收线程
  ret = pthread_join(t1, NULL); // 回收线程会失败,因为已经分离了
  if (ret != 0)
  {
    printf("pthread_join error:%s\n", strerror(ret));
    exit(1);
  }

  printf("main thread exit\n");

  return 0;
}